Vagrant 同步文件夹出现错误

Vagrant error when mount synced folder

在 Vagrantfile 里面增加了 config.vm.synced_folder "./workspace", "/home/vagrant/work" 内容后重新 reload, 报错如下:

1
2
3
4
5
6
7
8
9
10
11
12
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 home_vagrant_work /home/vagrant/work

The error output from the command was:

mount: unknown filesystem type 'vboxsf'

参考解决方案: https://github.com/hashicorp/vagrant/issues/6769

1
2
3
4
5
6
7
vagrant plugin install vagrant-vbguest

# 虚拟机内容可删除情况下
vagrant destroy && vagrant up

# 虚拟机内有重要文件无法同步出来时
vagrant reload --provision

这里有一些内容需要注释一下

在解决这个问题之前, 一直认为是我的 Vagrantfile 写的有问题, 因为默认情况下会将主机 Vagrantfile 所在文件夹同步到虚拟机的 /vagrant 目录下, 而且不会报错.

但是经过测试, 在开启虚拟机后, 在主机的 Vagrantfile 文件夹创建文件不会同步到虚拟机的 /vagrant 目录下, 而且, 在虚拟机的 /vagrant 目录下创建的文件也不会同步到主机的 Vagrantfile 所在目录.

这就引起一个问题, 这个映射关系是否是错误的?

在解决上面问题之后, 启动发现, 原有映射与新创建映射的区别:

1
2
3
4
5
# 这一行是原有将主机 Vagrantfile 文件所在目录映射到虚拟机 /vagrant 目录的日志
==> default: Rsyncing folder: /Users/username/vagrant-env => /vagrant
# 这一行是增加了 synced_folder 之后的日志
==> default: Mounting shared folders...
default: /home/vagrant/work => /Users/username/vagrant-env/workspace

经测试, 主机 Vagrantfile 所在文件夹仍然无法与虚拟机 /vagrant 目录同步数据

但是虚拟机 /home/vagrant/work 目录已经可以与主机 /Users/username/vagrant-env/workspace 目录同步数据了

!!!敲黑板!!!

问题就出现在, 默认的文件夹映射(Rsyncing folder) 应该只是将文件拷贝到指定的目录下, 而不是真正映射.

而通过 synced_folder 映射的目录才是真正的映射, 可以在机器运行过程中, 在主机与虚拟机之间同步数据.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.